export {};

/* 
泛型约束：
作用：为泛型添加约束来`收缩类型`(缩窄类型取值范围)
1. 指定更加具体的类型
2. 通过 `extends` 关键字使用该接口，为泛型(类型变量)添加约束
*/

interface Ilength {
  length: number;
}

// T 通过 extends 继承了 Ilength，那么 T 就有了 Ilength 的属性
// 可以理解为 满足Ilength条件的任意T类型
const fn = <T extends Ilength>(a: T) => {
  console.log('a.length -----> ', a.length);
};

// 报错
// fn(10);
fn([]);
fn(document.querySelectorAll('div'));
fn('ahudshufsd');
fn({ length: 20 });
// 报错
// fn({ length: '20' });
